library(Seurat)
library(dplyr)
library(tibble)
library(cowplot)
library(DT)
Data loading and processing
vijay <- readRDS('output/seurat_objects/vijay/vijay.rds')
U/L branch marker genes
Plot the U and L branch marker genes.
#DE genes between T1T2T3 and T4T5 in the 10x-180831 data.
markers_u_l <- read.table('output/markergenes/180831/markers_10x-180831_upperbranch_lowerbranch_negbinom', sep='\t', header=T)
cannot open file 'output/markergenes/180831/markers_10x-180831_upperbranch_lowerbranch_negbinom': No such file or directoryError in file(file, "rt") : cannot open the connection
How do these genes look in the 180831 data?

And how are they expressed in the Vijay data?


Some U branch markers are not really expressed (SCD, PLIN4, GDP1, RBP4). Interestingly most U branch markers are also expressed in I1 and I3 and E1-E3.
Seurat integration with 10x-180831 data

Structural cells overlap with clusters P4, P5, P6, P2, P7. Metabolic cells overlap partly with P2 and P7 and also I3.
Predict cell types from 10x-180831 data
predictions2 <- TransferData(anchorset = anchors, refdata = data_180831$branch, dims=1:20, weight.reduction='pca', slot='pca')
Running PCA on query dataset
Scores

Assign the labels if threshold is above 0.7 (same threshold as the wolfrum label transfer).
for (col in c('pca_project', 'pca', 'cca.')){
for (t in c(0.5, 0.7, 0.9, 0.95, 0.99)){
preds <- assign_labels(col, t)
#Ã¥vijay <- AddMetaData(vijay, preds, col.name=paste(col, 'predicted_label', t, sep='.'))
}
}
Error in `[.data.frame`(vijay@meta.data, , c(paste(colname, ".prediction.score.max", :
undefined columns selected
Threshold for prediction = 0.5

Threshold for prediction = 0.7

Threshold for prediction = 0.9

I3 = adipose tissue macrophages (Vijay paper). Perhaps no metabolic preadipocytes because of maturation?

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IgbWVzc2FnZT1GfQpsaWJyYXJ5KFNldXJhdCkKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWJibGUpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeShEVCkKYGBgCgpEYXRhIGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcKCmBgYHtyfQojIGZpbGUuZGF0YSA8LSAiL25mc2RhdGEvcHJvamVjdHMvdGltc2hlbC9zYy1zY2hlZWxlX2xhYl9hZGlwb3NlX2ZsdWlkaWdtX2MxL2RhdGEtdmlqYXkvR1NFMTI5MzYzX1NWRl9Ob3JtYWxpc2VkX0RhdGEudHh0Lmd6IgojIGRmLmRhdGEgPC0gcmVhZF90c3YoZmlsZS5kYXRhKSAlPiUgcmVuYW1lKGdlbmU9WDEpIyBXT1JLUyBhbmQgcGFyc2VkIGNvcnJlY3RseS4gV2FybmluZyBtZXNzYWdlOiBNaXNzaW5nIGNvbHVtbiBuYW1lcyBmaWxsZWQgaW46ICdYMScgWzFdIAojIGRmLmRhdGEgPC0gZGF0YS50YWJsZTo6ZnJlYWQoZmlsZS5kYXRhLCBuVGhyZWFkPTI0LCBzaG93UHJvZ3Jlc3M9VCkKIyBkZi5kYXRhIDwtIGRmLmRhdGEgJT4lIGNvbHVtbl90b19yb3duYW1lcyh2YXI9IlYxIikKIyAKIyAjIyMgTWV0YS1kYXRhCiMgZmlsZS5tZXRhZGF0YSA8LSAiL25mc2RhdGEvcHJvamVjdHMvdGltc2hlbC9zYy1zY2hlZWxlX2xhYl9hZGlwb3NlX2ZsdWlkaWdtX2MxL2RhdGEtdmlqYXkvR1NFMTI5MzYzX2NlbGxfbWV0YWRhdGEudHh0Lmd6IgojIGRmLm1ldGFkYXRhIDwtIHJlYWRfdHN2KGZpbGUubWV0YWRhdGEpCiMgZGYubWV0YWRhdGEgPC0gZGYubWV0YWRhdGEgJT4lIHJlbmFtZShjZWxsX2JhcmNvZGU9WDEsIGRpYWJldGVzPUNvbmRpdGlvbiwgZGVwb3Q9VGlzc3VlLCBjZWxsdHlwZT1DbHNJRCkKIyAjICpUT0RPKjogcmVuYW1lIElBLS0+dmlzYzsgU0MtLT5zdWJxCiMgZGYubWV0YWRhdGEgPC0gZGYubWV0YWRhdGEgJT4lIGNvbHVtbl90b19yb3duYW1lcyh2YXI9ImNlbGxfYmFyY29kZSIpCiMgCiMgIyMjIENyZWF0ZSBvYmplY3QKIyB2aWpheSA8LSBDcmVhdGVTZXVyYXRPYmplY3QoY291bnRzPWRmLmRhdGEsIG1ldGEuZGF0YT1kZi5tZXRhZGF0YSwgcHJvamVjdD0idmlqYXkiKSAjIFdhcm5pbmc6IEZlYXR1cmUgbmFtZXMgY2Fubm90IGhhdmUgdW5kZXJzY29yZXMgKCdfJyksIHJlcGxhY2luZyB3aXRoIGRhc2hlcyAoJy0nKQojIHZpamF5W1siUk5BIl1dQGRhdGEgPC0gdmlqYXlbWyJSTkEiXV1AY291bnRzICMgY29weSBzbG90IGJlY2F1c2UgZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQKIyAjIE5COiBkbyBub3QgcGVyZm9ybSBmdXJ0aGVyIChsb2cpbm9ybWFsaXphdGlvbiBhcyB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gZG9uZQojIAojIHZpamF5IDwtIFNjYWxlRGF0YSh2aWpheSkKIyB2aWpheSA8LSBGaW5kVmFyaWFibGVGZWF0dXJlcyh2aWpheSkKIyB2aWpheSA8LSBSdW5QQ0EodmlqYXkpCiMgI0VsYm93UGxvdCh2aWpheSwgcmVkdWN0aW9uPSdwY2EnKQojIHZpamF5IDwtIFJ1blRTTkUodmlqYXksIGRpbXM9MToxMSkKIyB2aWpheSA8LSBSdW5VTUFQKHZpamF5LCBkaW1zPTE6MTEpCiMgc2F2ZVJEUyh2aWpheSwgJ291dHB1dC9zZXVyYXRfb2JqZWN0cy92aWpheS92aWpheS5yZHMnKQpgYGAKCmBgYHtyfQp2aWpheSA8LSByZWFkUkRTKCdvdXRwdXQvc2V1cmF0X29iamVjdHMvdmlqYXkvdmlqYXkucmRzJykKYGBgCgojIE1ldGFkYXRhIHBsb3RzCgpgYGB7ciBmaWcuaGVpZ2h0ID0gMTAsIGZpZy53aWR0aCA9IDEyLCBmaWcuYWxpZ24gPSAiY2VudGVyIn0KI3Bsb3QgY2VsbCB0eXBlcyArIG92ZXJsYXllZCB3aXRoIG1ldGEgZGF0YQpwbG90X2dyaWQoCiBVTUFQUGxvdCh2aWpheSwgZ3JvdXAuYnk9J2NlbGx0eXBlJywgbGFiZWw9VCksIAogVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdkZXBvdCcpLAogVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdkaWFiZXRlcycpCikKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0ID0gNSwgZmlnLndpZHRoID0gMTIsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQojcGxvdCBjZWxsIHR5cGVzICsgb3ZlcmxheWVkIHdpdGggbWV0YSBkYXRhCnBsb3RfZ3JpZCgKIEZlYXR1cmVQbG90KHZpamF5LCBmZWF0dXJlcz0nbkZlYXR1cmVfUk5BJyksIAogRmVhdHVyZVBsb3QodmlqYXksIGZlYXR1cmVzPSduQ291bnRfUk5BJykKKQpgYGAKCiMgVS9MIGJyYW5jaCBtYXJrZXIgZ2VuZXMKClBsb3QgdGhlIFUgYW5kIEwgYnJhbmNoIG1hcmtlciBnZW5lcy4gCgpgYGB7cn0KZGF0YV8xODA4MzEgPC0gcmVhZFJEUygnb3V0cHV0L3NldXJhdF9vYmplY3RzLzE4MDgzMS8xMHgtMTgwODMxLVMzJykKI0RFIGdlbmVzIGJldHdlZW4gVDFUMlQzIGFuZCBUNFQ1IGluIHRoZSAxMHgtMTgwODMxIGRhdGEuCm1hcmtlcnNfdV9sIDwtIHJlYWQudGFibGUoJ291dHB1dC9tYXJrZXJnZW5lcy8xODA4MzEvbWFya2Vyc18xMHgtMTgwODMxX3VwcGVyYnJhbmNoX2xvd2VyYnJhbmNoX25lZ2Jpbm9tJywgc2VwPSdcdCcsIGhlYWRlcj1UKQptYXJrZXJzX3UgPC0gbWFya2Vyc191X2xbb3JkZXIoLW1hcmtlcnNfdV9sJGF2Z19sb2dGQyksXQptYXJrZXJzX2wgPC0gbWFya2Vyc191X2xbb3JkZXIobWFya2Vyc191X2wkYXZnX2xvZ0ZDKSxdCmBgYAoKSG93IGRvIHRoZXNlIGdlbmVzIGxvb2sgaW4gdGhlIDE4MDgzMSBkYXRhPwoKYGBge3IsIGZpZy5oZWlnaHQgPSAxMiwgZmlnLndpZHRoID0gMTIsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQpwbG90cyA8LSBGZWF0dXJlUGxvdChkYXRhXzE4MDgzMSwgZmVhdHVyZXM9Yyhhcy52ZWN0b3IobWFya2Vyc191JGdlbmUpWzE6MTBdLCBhcy52ZWN0b3IobWFya2Vyc19sJGdlbmUpWzE6MTBdKSwgcHQuc2l6ZT0xLCBjb21iaW5lPUYpCnBsb3RfZ3JpZChwbG90bGlzdD1wbG90cywgbmNvbD00KQpgYGAKCkFuZCBob3cgYXJlIHRoZXkgZXhwcmVzc2VkIGluIHRoZSBWaWpheSBkYXRhPwoKYGBge3J9ClVNQVBQbG90KHZpamF5LCBncm91cC5ieT0nY2VsbHR5cGUnLCBsYWJlbD1UKQpgYGAKCgpgYGB7ciwgZmlnLmhlaWdodCA9IDUwLCBmaWcud2lkdGggPSAxMiwgZmlnLmFsaWduID0gImNlbnRlciJ9CnBsb3RzIDwtIEZlYXR1cmVQbG90KHZpamF5LCBmZWF0dXJlcz1jKGFzLnZlY3RvcihtYXJrZXJzX3UkZ2VuZSlbMToxMF0sIGFzLnZlY3RvcihtYXJrZXJzX2wkZ2VuZSlbMToxMF0pLCBwdC5zaXplPTEsIGNvbWJpbmU9RikKcGxvdF9ncmlkKHBsb3RsaXN0PXBsb3RzLCBuY29sPTIpCmBgYAoKU29tZSBVIGJyYW5jaCBtYXJrZXJzIGFyZSBub3QgcmVhbGx5IGV4cHJlc3NlZCAoU0NELCBQTElONCwgR0RQMSwgUkJQNCkuIEludGVyZXN0aW5nbHkgbW9zdCBVIGJyYW5jaCBtYXJrZXJzIGFyZSBhbHNvIGV4cHJlc3NlZCBpbiBJMSBhbmQgSTMgYW5kIEUxLUUzLiAKCiMgU2V1cmF0IGludGVncmF0aW9uIHdpdGggMTB4LTE4MDgzMSBkYXRhCgpgYGB7ciwgZmlnLmhlaWdodCA9IDgsIGZpZy53aWR0aCA9IDEyLCBmaWcuYWxpZ24gPSAiY2VudGVyIn0KI2FuY2hvcnMgPC0gRmluZEludGVncmF0aW9uQW5jaG9ycyhvYmplY3QubGlzdCA9IGxpc3QodmlqYXksIGRhdGFfMTgwODMxKSwgZGltcyA9IDE6MjApCiNpbnRlZ3JhdGVkIDwtIEludGVncmF0ZURhdGEoYW5jaG9yc2V0ID0gYW5jaG9ycywgZGltcyA9IDE6MjApCiNpbnRlZ3JhdGVkIDwtIFNjYWxlRGF0YShpbnRlZ3JhdGVkLCB2ZXJib3NlID0gRkFMU0UpCiNpbnRlZ3JhdGVkIDwtIFJ1blBDQShpbnRlZ3JhdGVkLCBucGNzID0gMzAsIHZlcmJvc2UgPSBGQUxTRSkKI2ludGVncmF0ZWQgPC0gUnVuVU1BUChpbnRlZ3JhdGVkLCByZWR1Y3Rpb24gPSAicGNhIiwgZGltcyA9IDE6MTApCiNpbnRlZ3JhdGVkIDwtIFJ1blRTTkUoaW50ZWdyYXRlZCwgcmVkdWN0aW9uID0gInBjYSIsIGRpbXMgPSAxOjEwKQojc2F2ZVJEUyhpbnRlZ3JhdGVkLCAnL3Byb2plY3RzL3B5dHJpay9zY19hZGlwb3NlL2FuYWx5emVfMTB4X2ZsdWlkaWdtLzEweC1hZGlwb2N5dGUtYW5hbHlzaXMvb3V0cHV0L3NldXJhdF9vYmplY3RzL3ZpamF5L3ZpamF5LjE4MDgzMS5pbnRlZ3JhdGVkLnJkcycpCgppbnRlZ3JhdGVkIDwtIHJlYWRSRFMoJ291dHB1dC9zZXVyYXRfb2JqZWN0cy92aWpheS92aWpheS4xODA4MzEuaW50ZWdyYXRlZC5yZHMnKQppbnRlZ3JhdGVkQG1ldGEuZGF0YVsnZGF0YXNldCddIDwtICcxMHgtMTgwODMxJwppbnRlZ3JhdGVkQG1ldGEuZGF0YVt3aGljaChpcy5uYShpbnRlZ3JhdGVkQG1ldGEuZGF0YSRicmFuY2gpKSwgJ2RhdGFzZXQnXSA8LSAnVmlqYXknCgpwbG90X2dyaWQoCiAgVU1BUFBsb3QoaW50ZWdyYXRlZCwgZ3JvdXAuYnk9J2RhdGFzZXQnKSwKICBVTUFQUGxvdChpbnRlZ3JhdGVkLCBncm91cC5ieT0nY2VsbHR5cGUnLCBsYWJlbD1UKSwKICBVTUFQUGxvdChpbnRlZ3JhdGVkLCBncm91cC5ieT0nYnJhbmNoJyksIG5jb2w9MgopCmBgYAoKU3RydWN0dXJhbCBjZWxscyBvdmVybGFwIHdpdGggY2x1c3RlcnMgUDQsIFA1LCBQNiwgUDIsIFA3LiBNZXRhYm9saWMgY2VsbHMgb3ZlcmxhcCBwYXJ0bHkgd2l0aCBQMiBhbmQgUDcgYW5kIGFsc28gSTMuICAKCiMgUHJlZGljdCBjZWxsIHR5cGVzIGZyb20gMTB4LTE4MDgzMSBkYXRhCgpgYGB7cn0KI2ZpbmQgYW5jaG9ycwphbmNob3JzIDwtIEZpbmRUcmFuc2ZlckFuY2hvcnMocmVmZXJlbmNlID0gZGF0YV8xODA4MzEsIHF1ZXJ5ID0gdmlqYXksIGRpbXMgPSAxOjIwKQphbmNob3JzX2NjYSA8LSBGaW5kVHJhbnNmZXJBbmNob3JzKHJlZmVyZW5jZSA9IGRhdGFfMTgwODMxLCBxdWVyeSA9IHZpamF5LCBkaW1zID0gMToyMCwgcmVkdWN0aW9uID0gJ2NjYScpCgojdHJhbnNmZXIgbGFiZWxzCnByZWRpY3Rpb25zX3BjYV9wcm9qZWN0IDwtIFRyYW5zZmVyRGF0YShhbmNob3JzLCBkYXRhXzE4MDgzMSRicmFuY2gsIGRpbXMgPSAxOjIwLCB3ZWlnaHQucmVkdWN0aW9uPSdwY2Fwcm9qZWN0JykKcHJlZGljdGlvbnNfcGNhIDwtIFRyYW5zZmVyRGF0YShhbmNob3JzLCBkYXRhXzE4MDgzMSRicmFuY2gsIGRpbXM9MToyMCwgd2VpZ2h0LnJlZHVjdGlvbj0ncGNhJykKcHJlZGljdGlvbnNfY2NhIDwtIFRyYW5zZmVyRGF0YShhbmNob3JzX2NjYSwgZGF0YV8xODA4MzEkYnJhbmNoLCBkaW1zPTE6MjAsIHdlaWdodC5yZWR1Y3Rpb249J2NjYScpCgojcmVuYW1lIGNvbG5hbWVzCm5hbWVzKHByZWRpY3Rpb25zX3BjYV9wcm9qZWN0KSA8LSB1bmxpc3QobGFwcGx5KG5hbWVzKHByZWRpY3Rpb25zX3BjYV9wcm9qZWN0KSwgZnVuY3Rpb24oeCl7cmV0dXJuKHBhc3RlKCdwY2FfcHJvamVjdC4nLCB4LCBzZXA9JycpKX0pKQpuYW1lcyhwcmVkaWN0aW9uc19wY2EpIDwtIHVubGlzdChsYXBwbHkobmFtZXMocHJlZGljdGlvbnNfcGNhKSwgZnVuY3Rpb24oeCl7cmV0dXJuKHBhc3RlKCdwY2EuJywgeCwgc2VwPScnKSl9KSkKbmFtZXMocHJlZGljdGlvbnNfY2NhKSA8LSB1bmxpc3QobGFwcGx5KG5hbWVzKHByZWRpY3Rpb25zX2NjYSksIGZ1bmN0aW9uKHgpe3JldHVybihwYXN0ZSgnY2NhLicsIHgsIHNlcD0nJykpfSkpCgp2aWpheSA8LSBBZGRNZXRhRGF0YSh2aWpheSwgbWV0YWRhdGEgPSBwcmVkaWN0aW9uc19wY2FfcHJvamVjdCkKdmlqYXkgPC0gQWRkTWV0YURhdGEodmlqYXksIG1ldGFkYXRhID0gcHJlZGljdGlvbnNfcGNhKQp2aWpheSA8LSBBZGRNZXRhRGF0YSh2aWpheSwgbWV0YWRhdGEgPSBwcmVkaWN0aW9uc19jY2EpCmBgYAoKU2NvcmVzCgpgYGB7ciwgZmlnLmhlaWdodCA9IDMwLCBmaWcud2lkdGggPSAxMiwgZmlnLmFsaWduID0gImNlbnRlciJ9CnBsb3RfZ3JpZCgKICBVTUFQUGxvdCh2aWpheSwgZ3JvdXAuYnk9J2NlbGx0eXBlJywgbGFiZWw9VCksCiAgRmVhdHVyZVBsb3QodmlqYXksIGZlYXR1cmVzPSdwY2EucHJlZGljdGlvbi5zY29yZS5Qcm9nZW5pdG9yJyksCiAgRmVhdHVyZVBsb3QodmlqYXksIGZlYXR1cmVzPSdwY2FfcHJvamVjdC5wcmVkaWN0aW9uLnNjb3JlLlByb2dlbml0b3InKSwKICBGZWF0dXJlUGxvdCh2aWpheSwgZmVhdHVyZXM9J2NjYS5wcmVkaWN0aW9uLnNjb3JlLlByb2dlbml0b3InKSwKICBGZWF0dXJlUGxvdCh2aWpheSwgZmVhdHVyZXM9J3BjYS5wcmVkaWN0aW9uLnNjb3JlLk1ldGFib2xpYycpLAogIEZlYXR1cmVQbG90KHZpamF5LCBmZWF0dXJlcz0ncGNhX3Byb2plY3QucHJlZGljdGlvbi5zY29yZS5NZXRhYm9saWMnKSwKICBGZWF0dXJlUGxvdCh2aWpheSwgZmVhdHVyZXM9J2NjYS5wcmVkaWN0aW9uLnNjb3JlLk1ldGFib2xpYycpLAogIEZlYXR1cmVQbG90KHZpamF5LCBmZWF0dXJlcz0ncGNhLnByZWRpY3Rpb24uc2NvcmUuRUNNJyksCiAgRmVhdHVyZVBsb3QodmlqYXksIGZlYXR1cmVzPSdwY2FfcHJvamVjdC5wcmVkaWN0aW9uLnNjb3JlLkVDTScpLAogIEZlYXR1cmVQbG90KHZpamF5LCBmZWF0dXJlcz0nY2NhLnByZWRpY3Rpb24uc2NvcmUuRUNNJyksCiAgVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdwY2EucHJlZGljdGVkLmlkJyksCiAgVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdwY2FfcHJvamVjdC5wcmVkaWN0ZWQuaWQnKSwKICBVTUFQUGxvdCh2aWpheSwgZ3JvdXAuYnk9J2NjYS5wcmVkaWN0ZWQuaWQnKSwKICBuY29sPTIKKQpgYGAKCkFzc2lnbiB0aGUgbGFiZWxzIGlmIHRocmVzaG9sZCBpcyBhYm92ZSAwLjcgKHNhbWUgdGhyZXNob2xkIGFzIHRoZSB3b2xmcnVtIGxhYmVsIHRyYW5zZmVyKS4gCgpgYGB7cn0KYXNzaWduX2xhYmVscyA8LSBmdW5jdGlvbihjb2xuYW1lLCB0aHJlc2hvbGQ9MC43KXsKICBwcmVkX2lkcyA8LSB1bmxpc3QoYXMudmVjdG9yKGFwcGx5KHZpamF5QG1ldGEuZGF0YVssYyhwYXN0ZShjb2xuYW1lLCcucHJlZGljdGlvbi5zY29yZS5tYXgnLCBzZXA9JycpLCBwYXN0ZShjb2xuYW1lLCAnLnByZWRpY3RlZC5pZCcsIHNlcD0nJykpXSwgMSwgZnVuY3Rpb24oeCl7CiAgICBpZiAoeFtbMV1dIDwgdGhyZXNob2xkKXsKICAgICAgcmV0dXJuKE5BKQogICAgfSBlbHNlewogICAgICByZXR1cm4oeFtbMl1dKQogICAgfQogIH0pKSkKICByZXR1cm4ocHJlZF9pZHMpCn0KCmZvciAoY29sIGluIGMoJ3BjYV9wcm9qZWN0JywgJ3BjYScsICdjY2EnKSl7CiAgZm9yICh0IGluIGMoMC41LCAwLjcsIDAuOSwgMC45NSwgMC45OSkpewogICAgcHJlZHMgPC0gYXNzaWduX2xhYmVscyhjb2wsIHQpCiAgICB2aWpheSA8LSBBZGRNZXRhRGF0YSh2aWpheSwgcHJlZHMsIGNvbC5uYW1lPXBhc3RlKGNvbCwgJ3ByZWRpY3RlZF9sYWJlbCcsIHQsIHNlcD0nLicpKQogIH0KfQpgYGAKClRocmVzaG9sZCBmb3IgcHJlZGljdGlvbiA9IDAuNQoKYGBge3IsIGZpZy5oZWlnaHQgPSA4LCBmaWcud2lkdGggPSAxMiwgZmlnLmFsaWduID0gImNlbnRlciJ9CnBsb3RfZ3JpZCgKICBVTUFQUGxvdCh2aWpheSwgZ3JvdXAuYnk9J3BjYS5wcmVkaWN0ZWRfbGFiZWwuMC41JyksCiAgVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdwY2FfcHJvamVjdC5wcmVkaWN0ZWRfbGFiZWwuMC41JyksCiAgVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdjY2EucHJlZGljdGVkX2xhYmVsLjAuNScpLCBuY29sPTIKKQpgYGAKClRocmVzaG9sZCBmb3IgcHJlZGljdGlvbiA9IDAuNwoKYGBge3IsIGZpZy5oZWlnaHQgPSA4LCBmaWcud2lkdGggPSAxMiwgZmlnLmFsaWduID0gImNlbnRlciJ9CnBsb3RfZ3JpZCgKICBVTUFQUGxvdCh2aWpheSwgZ3JvdXAuYnk9J3BjYS5wcmVkaWN0ZWRfbGFiZWwuMC43JyksCiAgVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdwY2FfcHJvamVjdC5wcmVkaWN0ZWRfbGFiZWwuMC43JyksCiAgVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdjY2EucHJlZGljdGVkX2xhYmVsLjAuNycpLCBuY29sPTIKKQpgYGAKClRocmVzaG9sZCBmb3IgcHJlZGljdGlvbiA9IDAuOQoKYGBge3IsIGZpZy5oZWlnaHQgPSA4LCBmaWcud2lkdGggPSAxMiwgZmlnLmFsaWduID0gImNlbnRlciJ9CnBsb3RfZ3JpZCgKICBVTUFQUGxvdCh2aWpheSwgZ3JvdXAuYnk9J3BjYS5wcmVkaWN0ZWRfbGFiZWwuMC45JyksCiAgVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdwY2FfcHJvamVjdC5wcmVkaWN0ZWRfbGFiZWwuMC45JyksCiAgVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdjY2EucHJlZGljdGVkX2xhYmVsLjAuOScpLCBuY29sPTIKKQpgYGAKCkkzID0gYWRpcG9zZSB0aXNzdWUgbWFjcm9waGFnZXMgKFZpamF5IHBhcGVyKS4gUGVyaGFwcyBubyBtZXRhYm9saWMgcHJlYWRpcG9jeXRlcyBiZWNhdXNlIG9mIG1hdHVyYXRpb24/CgpgYGB7cn0KVU1BUFBsb3QodmlqYXksIGdyb3VwLmJ5PSdjZWxsdHlwZScsIGxhYmVsPVQpCmBgYAoKCg==